package day12;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//测试定长线程池
public class TestFixed{
    public static void main(String[] args) {
        //测试     参数:最大支持的并发数量
//        ExecutorService es=
//                Executors.newFixedThreadPool(4);
//        for(int i=0;i<10;i++){
//            es.execute(()->{
//                System.out.println(
//                        Thread.currentThread().getName());
//                try {
//                    Thread.sleep(3000); //任务时才
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//        //关闭池 但是已经添加的完的任务也会执行
//        es.shutdown();
        //案例: 有一个餐厅 需要做5盘菜
        //但是只有3个灶台 (一次性可以同时炒3盘菜)
        //最后统计 炒5盘菜 一共花了多少时间
        String[] names={"辣椒炒肉","鸡脚","小鸡炖蘑菇","甲鱼","黄鳝"};
        long[] times={1000,3000,5000,5000,2000};
        ExecutorService es=
                Executors.newFixedThreadPool(3);
        long start=System.currentTimeMillis();
        for(int i=0;i<names.length;i++){
            int index=i;
            es.execute(()->{
                System.out.println("开始做:"+names[index]);
                try {
                    Thread.sleep(times[index]);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("已经做好:"+names[index]);
            });
        }
        es.shutdown();
        //结束的时间 一定线程池 关闭了 而且里面的任务也执行完了
        //用于判断线程池的里面的任务 是否执行结束
        //没有结束返回false  否则true
        //es.isTerminated()
        while(true){
            if(es.isTerminated()){
                long stop=System.currentTimeMillis();
                System.out.println("所有菜都抄完了:"+
                        (stop-start)+"ms");
                break;
            }
        }
    }
}
